package com.zzyq.pc.web.report.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.zzyq.pc.common.plugin.db.PageView;
import com.zzyq.pc.mongodb.model.MongodbDate;
import com.zzyq.pc.web.report.model.Report;
import com.zzyq.pc.web.report.response.ModuleData;

public interface IReportService {
	
	/**
	 * 返回任意星级段的舆情信息 (只查询敏感方案)
	 * 
	 * @param bigthenNum
	 *            设定的 < 最大转载数
	 * @param lessthenNum
	 *            设定的 >= 最小转载数
	 * @param report_id
	 *            报告ID
	 * @return List<MongodbDate>集合 按星级排序
	 */
	public List<MongodbDate> getDataByStarLevel(Integer bigthenNum, Integer lessthenNum,Integer report_id);

	/**
	 * 计算环比参数返回报告对象
	 * 
	 * @param lastNumber
	 *            上期总数
	 * @param lastPositiveNumber
	 *            上期正面数
	 * @param lastNegativeNumber
	 *            上期负面数
	 * @param companyId
	 *            团体ID
	 * @return Report报告对象
	 */
	public Report getTodayReport(Integer lastNumber, Integer lastPositiveNumber, Integer lastNegativeNumber,
			Integer companyId);

	/**
	 * 查询当前报告上一期报告
	 * 
	 * @param reportId
	 *            当前报告ID
	 * @param companyId
	 *            报告所属团体ID
	 * @return 上一期报告对象
	 */
	public Report selectReportByReportIdAndCompanyId(Integer reportId, Integer companyId, Date thisreportTime);

	/**
	 * 新增报告
	 * 
	 * @param report
	 * @return
	 */
	public boolean insertReport(Report report);

	/**
	 * 报告列表查询
	 * 
	 * @param pageView
	 *            分页对象
	 * @param companyId
	 *            团体ID
	 * @return List<Report> 对象
	 */
	public List<Report> selectByCompanyId(PageView pageView);

	/**
	 * 单个报告查询
	 * 
	 * @param reportId
	 * @return Report
	 */
	public Report selectByPrimaryKey(Integer reportId);

	/**
	 * 报告预览
	 * 
	 * @param reportId
	 * @return 三大星级维度List + 两日环比
	 */
	public Map<String, Object> selectOneReport(Integer reportId);

	/**
	 * 生成对应团体报告
	 * 
	 * @param companyId
	 * @return
	 */
	public boolean creatReport(Integer companyId);

	/**
	 * 获取团队在数据库中最新的报告
	 * 
	 * @param companyId
	 * @return
	 */
	Report selectMaxReport(Integer companyId);

	/**
	 * 模块处理
	 * 
	 * @param moduleData
	 */
	public void analyzeDisplayData(ModuleData moduleData, List<MongodbDate> earlyWarningList,
			List<MongodbDate> HighRiskList, List<MongodbDate> negativeWarningList, List<Report> reportList);

	/**
	 * 修改
	 * 
	 * @param record
	 * @return
	 */
	public boolean updateByPrimaryKey(Report record);

	/**
	 * 获取报告下所有集合数据
	 * 
	 * @param reportId
	 * @return
	 */
	public List<MongodbDate> getMongodbDate(Integer reportId);

	/**
	 * 查询团体下报告时间是否存在生成过的报告，可用作重复生成过滤
	 * 
	 * @param companyId
	 *            团体ID
	 * @param reportTime
	 *            报告日期
	 * @return
	 */
	public boolean selectRepeatReport(Integer companyId, Date reportTime);
}
